Utiliser un SSD NVMe avec Linux, même sur un vieux serveur

par Paul | 6 Août 2019 | Test de matériel | 7 commentaires

Les SSD NVMe constituent un vrai palier en termes de performances, mais il nécessitent de bien connaître l’environnement matériel dans lequel les exploiter. On peut même utiliser un SSD NVMe en tant que partition racine Linux dans un vieux serveur non compatible NVMe, avec un peu d’astuce.

Sommaire [masquer]

NVMe : avantages et connecteurs

Dans le monde des SSD, l’interface NVMe est ce qui se fait de mieux car elle permet des latences très courtes, une gestion de profondeur de queue améliorée, et d’autres optimisations encore (source : Intel et anandtech.com). En pratique, NVMe donne accès à des débits de lecture-écriture gigantesques de l’ordre de 1 ou 2 Go/sec selon les modèles.

L’interface NVMe passe toujours par un bus de transport PCIe, mais plusieurs types de connecteurs sont disponibles comme le M.2 ou U.2 alias SFF-8639 (mini-SAS) qui est utilisé par les SSD NVMe professionnels en 2,5 pouces (exemple : Intel P3600).

Le connecteur femelle M.2 qui est utilisé par NVMe (une encoche) et AHCI (une encoche) est également compatible avec des SSD SATA (deux encoches). Il ne faut donc pas confondre M.2 (le connecteur physique) avec NVMe (l’interface) ni PCIe (le bus de transport). Quant à mSATA, c’est encore un autre connecteur qui n’a rien à voir avec NVMe ni PCIe, mais juste un connecteur SATA en plus petit.

 

De gauche à droite : M.2 (NVMe à 1 encoche) / M.2 (SATA à 2 encoches) / mSATA

Une alternative au NVMe qui reste en PCIe : AHCI

Le NVMe n’est pas la seule interface qui utilise le bus PCIe, on trouve aussi des SSD AHCI dont les performances sont respectables et qui sont réputés mieux compatibles avec les ordinateurs anciens (discussion ici). Le HP Z Turbo Drive est un exemple de SSD PCIe fonctionnant en AHCI. Cette carte PCIe x4 utilise en fait un SSD M.2 AHCI (modèle Samsung XP941) à l’intérieur.

Pour donner un exemple matériel, la station de travail HP z230 est réputée compatible avec les SSD PCIe AHCI selon le changelog du BIOS, même pour le boot, mais incompatible avec le boot sur NVMe (selon les forums officiels).

Aucun ordinateur est 100% incompatible NVMe

Prérequis pour booter sur un SSD NVMe…

On peut trouver des cartes mères vendu comme compatibles avec NVMe et d’autres non. A mon sens, aucune carte mère est incompatible avec un SSD NVMe pourvu qu’elle ait un connecteur PCIe x4. Même une vieille carte mère pourra exploiter un espace de stockage NVMe. Par contre, il faut absolument une carte mère récente pour booter sur un stockage NVMe. Pour connaitre la compatibilité d’un modèle particulier vous pouvez vous référer à la liste à puces ci-dessous ou tout simplement vous référer à la documentation de votre matériel ou aux forums du constructeur.

Plus précisément, pour booter sur un SSD NVMe, il faut un BIOS qui soit UEFI, et qui soit compatible NVMe. Donc pour récapituler :

Finalement, il est rarement utile d’employer un SSD NVMe en tant que partition système, où un simple modèle SATA fera aussi bien. Par contre la technologie NVMe excelle dans des applications gourmandes en IO telles que le cache entrée-sortie (L2ARC sur ZFS par exemple), ou encore le stockage d’images de machines virtuelles. Ces applications ne nécessitent pas de booter dessus ; ces applications sont possibles sur une vieille machine.

…et si vous voulez quand même booter sur du NVMe avec un vieux matériel

Première méthode : l’amorçage sur un autre support

J’ai voulu malgré tout utiliser un SSD NVMe en tant que partition système sur un vieux serveur HP DL360 Gen8 dont le BIOS n’est pas compatible UEFI. On peut installer l’OS Debian dessus, mais le BIOS se trouvera incapable d’amorcer dessus car il ne le voit carrément pas.

Qu’à cela ne tienne, il vous suffit de créer une partition amorçable /boot sur un média extérieur tel qu’une carte SD ou une clé USB. J’ai choisi la carte SD sur l’emplacement interne de la carte mère. Les cartes SD récentes se payent le luxe d’être compatibles avec la commande TRIM.

Ainsi une table des partitions normale sur un SSD NVMe dans un serveur récent ressemble à cela (avec partition EFI) :

Disque /dev/nvme0n1 : 477 GiB, 512110190592 octets, 1000215216 secteurs Périphérique Début Fin Secteurs Taille Type /dev/nvme0n1p1 2048 976895 974848 476M Système EFI /dev/nvme0n1p2 976896 1000214527 999237632 476,5G Système de fichiers Linux

1

2

3

4

5

Disque /dev/nvme0n1 : 477 GiB, 512110190592 octets, 1000215216 secteurs

 

Périphérique    Début        Fin  Secteurs Taille Type

/dev/nvme0n1p1   2048     976895    974848   476M Système EFI

/dev/nvme0n1p2 976896 1000214527 999237632 476,5G Système de fichiers Linux

 

Une table des partitions sur un SSD NVMe dans un vieux serveur (pas EFI) ressemble à ci-dessous. J’ai rajouté la partition /boot sur le SSD (sdb).

Disque /dev/nvme0n1 : 477 GiB, 512110190592 octets, 1000215216 secteurs Périphérique Amorçage Début Fin Secteurs Taille Id Type /dev/nvme0n1p1 2048 1000214527 1000212480 477G 83 Linux Disque /dev/sdb : 488,5 MiB, 512229376 octets, 1000448 secteurs Périphérique Amorçage Début Fin Secteurs Taille Id Type /dev/sdb1 * 2048 999423 997376 487M 83 Linux

1

2

3

4

5

6

7

8

9

10

Disque /dev/nvme0n1 : 477 GiB, 512110190592 octets, 1000215216 secteurs

 

Périphérique   Amorçage Début        Fin   Secteurs Taille Id Type

/dev/nvme0n1p1           2048 1000214527 1000212480   477G 83 Linux

 

 

Disque /dev/sdb : 488,5 MiB, 512229376 octets, 1000448 secteurs

 

Périphérique Amorçage Début    Fin Secteurs Taille Id Type

/dev/sdb1    *         2048 999423   997376   487M 83 Linux

 

Seconde méthode : gestionnaire d’amorçage comme Clover

Dans la même idée, vous pouvez utiliser un vieux matériel pour amorcer sur un gestionnaire de boot comme Clover. Ce logiciel est bien connu des amateurs de Hackintosh. Ensuite, le gestionnaire de boot pourra se substituer au BIOS pour amorcer sur un SSD NVMe.

Cette solution vise particulièrement les machines sous Windows puisque n’importe quelle distribution Linux pourra utiliser la première méthode ci-dessus. Voici plus d’explications sur la procédure à suivre pour Windows.

Conclusion

Voilà je l’espère de quoi clarifier la situation entre toutes ces normes et ces incompatibilités possibles. Dernier conseil : si vous utilisez un convertisseur M.2 vers PCIe x4 (exemple ici), connectez-le sur un port de la carte mère x8 ou x16 car les connecteurs physiques x4 ne supportent pas toujours 4 voies, ce qui conduit à des performances bridées.

Pour en savoir plus sur l’utilisation d’un SSD sous Linux et de la commande trim, vous pouvez consulter mon guide ultime sur le SSD.